package com.haoze.nurse.dao;

import com.haoze.common.model.TaskExecuteBatchEntity;
import com.haoze.nurse.dto.NursePatientDTO;
import com.haoze.nurse.dto.SpecilmenDetailLisDto;
import com.haoze.nurse.dto.SpecimenExtraDto;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface NurseOrdersMapper {

    /**
     * 医嘱接口(新)
     *
     * @param inpatNum
     * @param endDate
     * @param startDate
     * @param type      时间类型，1开立时间，2起始时间，3结束时间
     * @param classId   医嘱类别 s
     * @return
     */
    List<Map<String, String>> queryOrders(
            @Param("inpatNum") String inpatNum,
            @Param("classId") String classId,
            @Param("type") String type,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("startNum") Integer startNum,
            @Param("endNum") Integer endNum);

    Long queryOrdersSum(
            @Param("inpatNum") String inpatNum,
            @Param("classId") String classId,
            @Param("type") String type,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate);

    /**
     * 医嘱接口(新)
     *
     * @param inpatNum
     * @param endDate
     * @param startDate
     * @param type      时间类型，1开立时间，2起始时间，3结束时间
     * @return
     */
    List<Map<String, String>> queryAllOrders(
            @Param("inpatNum") String inpatNum,
            @Param("type") String type,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("startNum") Integer startNum,
            @Param("endNum") Integer endNum);

    Long queryAllOrdersSum(
            @Param("inpatNum") String inpatNum,
            @Param("type") String type,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate);

    /**
     * 获取新开医嘱
     *
     * @param inpatNum
     * @param endDate
     * @param startDate
     * @param type      时间类型，1开立时间，2起始时间，3结束时间
     * @return
     */
    List<Map<String, String>> queryNewOpenOrders(
            @Param("inpatNum") String inpatNum,
            @Param("classId") String classId,
            @Param("type") String type,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("startNum") Integer startNum,
            @Param("endNum") Integer endNum);

    Long queryNewOpenOrdersSum(
            @Param("inpatNum") String inpatNum,
            @Param("classId") String classId,
            @Param("type") String type,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate);

    /**
     * 医嘱接口(新)
     *
     * @param inpatNum
     * @param endDate
     * @param startDate
     * @param nodeDate  计划停止时间节点
     * @param type      时间类型，1开立时间，2起始时间，3结束时间
     * @param classId   医嘱类别 s
     * @return
     */
    List<Map<String, String>> queryArrangeOrders(
            @Param("inpatNum") String inpatNum,
            @Param("classId") String classId,
            @Param("type") String type,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("startNum") Integer startNum,
            @Param("endNum") Integer endNum,
            @Param("nodeDate") Date nodeDate);

    Long queryArrangeOrdersSum(
            @Param("inpatNum") String inpatNum,
            @Param("classId") String classId,
            @Param("type") String type,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("nodeDate") Date nodeDate);

    /**
     * 医嘱接口(新)
     *
     * @param inpatNum
     * @param endDate
     * @param startDate
     * @param currDate  当前日期
     * @param type      时间类型，1开立时间，2起始时间，3结束时间
     * @return
     */
    List<Map<String, String>> queryAllStopedOrders(
            @Param("inpatNum") String inpatNum,
            @Param("classId") String classId,
            @Param("type") String type,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("startNum") Integer startNum,
            @Param("endNum") Integer endNum,
            @Param("currDate") Date currDate);

    Long queryAllStopedOrdersSum(
            @Param("inpatNum") String inpatNum,
            @Param("classId") String classId,
            @Param("type") String type,
            @Param("startDate") Date startDate,
            @Param("endDate") Date endDate,
            @Param("currDate") Date currDate);

    /**
     * 根据请求的ids封装回节点数据
     *
     * @param ids
     * @return
     */
    List<Map<String, String>> queryPatientOrdersByIds(@Param("ids") String[] ids);

    /**
     * 根据code和name查询SYS_DRUG_NAME_DICT表
     *
     * @param drugName
     * @return
     */
    String queryByDrugName(@Param("drugName") String drugName);


    // 获取当前患者指定时间节点前最近一条未停止医嘱
    Map<String, String> queryCurrAboutOrder(
            @Param("inpatNum") String inpatNum,
            @Param("nodeTime") Date nodeTime,
            @Param("type") String type);

    // 获取当前患者指定时间节点最近医嘱的上一条停止医嘱并且停止时间和最近的医嘱起始时间相同的记录
    String queryLastAboutOrder(
            @Param("inpatNum") String inpatNum,
            @Param("createDate") Date createDate,
            @Param("type") String type,
            @Param("ordersItem") String ordersItem);

    List<String> queryOrderWithOrderItem(@Param("inpatNum") String inpatNum,
                                         @Param("nodeTime") Date nodeTime,
                                         @Param("ordersItem") String ordersItem);


    List<Map<String, Object>> queryOrdersByInpatNum(@Param("inpatNum") String inpatNum, @Param("orderNo") String orderNo);

    /**
     * 根据查询条件获取病区内病人信息
     *
     * @param type
     * @param wardId
     * @param search
     * @param printStatus
     * @return
     */
    List<NursePatientDTO> queryPatientMsg(@Param("type") String type,@Param("wardId") String wardId, @Param("search") String search, @Param("printStatus") String printStatus,
                                          @Param("flag") String flag);

    /**
     * 根据查询条件获取病区内病人信息
     *
     * @param type
     * @param wardId
     * @param search
     * @param printStatus
     * @return
     */
    List<NursePatientDTO> queryWardBedMsg(@Param("type") String type,@Param("wardId") String wardId, @Param("search") String search, @Param("printStatus") String printStatus);

    List<Map<String, Object>> orderQRCode(@Param("inpatNum") String inpatNum, @Param("beginTime") String beginTime, @Param("endTime") String endTime);

    /**
     * 根据入院号查询已打印次数
     *
     * @param type
     * @param qrCode
     * @return
     */
    int getCount(@Param("qrCode") String qrCode,@Param("type") String type);

    /**
     * 获取静配中心二维码
     * @param inpatNum
     * @param beginTime
     * @param endTime
     * @return
     */
    List<Map<String, Object>> staticOrderQRCode(@Param("inpatNum") String inpatNum,@Param("beginTime") String beginTime,@Param("endTime") String endTime);

    /**
     * 根据入院号及医嘱组号获取对应的barcode
     * @param inpatNum
     * @param orderNo
     * @return
     */
    List<Map<String, Object>> queryBarcodeByInptNum(@Param("inpatNum") String inpatNum,@Param("orderNo") String orderNo);

    /**
     * 获取当日有执行任务的医嘱
     * @param inpatNum
     * @param beginTime
     * @param endTime
     * @param type
     * @param administration
     * @return
     */
    List<Map<String, Object>> orderQRCodeNew(@Param("inpatNum") String inpatNum,
                                             @Param("beginTime") String beginTime,
                                             @Param("endTime") String endTime,
                                             @Param("type") String type,
                                             @Param("administration") String administration,
                                             @Param("ordersClass") String ordersClass,
                                             @Param("staticWardList") List<String> staticWardList);

    List<String> queryStaticAllocationWard(@Param("taskName") String taskName);

    /**
     * 获取条码类型
     * @param id
     * @return
     */
    String getAdministrationName(String id);

    /**
     * 通过医嘱id，查询医嘱打印列表
     * @return
     */
    List<Map<String,Object>> queryOrderByIds(@Param("orderIds")List<String> orderIds,@Param("staticWardList") List<String> staticWardList);



    List<Map<String, String>>  selectAdministrationType();




    void  insertSepcimen(SpecilmenDetailLisDto detailLisDto);

    /**
     * 查询标本
     * @param specimenNum
     * @return
     */
    Integer querySepcimenDetailCount(String specimenNum, String reqNum,String seNum);

    /**
     * 查询标本额外信息
     * @param reqNum
     * @return
     */
    SpecimenExtraDto querySpecimenExtra(String reqNum,String seNum);

    List<Map<String, String>> queryCycleOrderExec(Map<String,Object> map);

    Map<String,String> getEmrFileIdFromExec(@Param("inpatorderdataId") String inpatorderdataId);

    Map<String, String> getMoveInjectTaskIdAndNodeId(@Param("inpatOrderId") String inpatorderdataId);

    void updateOrderExecuteTime(@Param("inpatorderdataId") String inpatorderdataId,@Param("nextExecDate") Date finallyDate);

    TaskExecuteBatchEntity queryTaskBatch(@Param("batchNo") long batchNo);

    String queryPatientOrdersByInpatNumAndOrderNo(@Param("inpatNum") String inpatNum,@Param("orderNo") String orderNo,@Param("administration")String administration);

    List<Map<String,String>> queryPatientByWardId(@Param("wardDeptId") String wardDeptId);

    void insertSepcimenList(@Param("list") List<SpecilmenDetailLisDto> list);

    String querySpecialUsage(@Param("administrationId") String administrationId);

    List<Map<String,String>> queryObstetricWard(@Param("wardId") String wardId,@Param("varCode") String varCode);
}
